﻿/**
* Скрипт отображающий панель управления визитками
*/
var container = Ext.getCmp(sectionId);
Ext.onReady(function () {
    var businessCardsPanel = {
        xtype: 'panel',
        frame: false,
        id: 'businessCardsPanel',
        layout: 'fit',
        items: [
            {
                xtype:'dataview',
                id: 'businessCards',
                multiSelect: false,
                singleSelect: true,
                autoScroll: false,
                tpl: new Ext.XTemplate(
                   '<tpl for=".">',
                       '<div class="card-wrap" id="card-{id}">',
                       '<div class="cardThumb"><img src="{cardImageUrl}" title="{title}"></div>',
                       '<div align="center" class="x-editable">{title}</div></div>',
                   '</tpl>',
                   '<div class="x-clear"></div>'),
                overClass:'x-view-over',
                itemSelector:'div.card-wrap',
                selectedClass: 'dataview-selected',
                emptyText: '<center>Нет данных для отображения</center>',
                store: new Ext.data.JsonStore({
                    root: 'data',
                    idProperty: 'id',
                    fields: [
                        'id',
                        'title',
                        'description',
                        'cardUrl',
                        'cardImageUrl',
                        'status',
                        'cardHolderType',
                        'cardType',
                        'email',
                        'website',
                        'phones',
                        'city',
                        'dateCreated',
                        'dateModified'
                    ]
                })
            }
        ],
        tbar: [
            {
                text: 'Все визитки',
                tooltip: 'Отображает все визитки системы',
                handler: function(){
                    reloadAllCards();
                }
            },
            {
                text: 'На проверке',
                tooltip: 'Отображает визитки, находящиеся на проверке',
                handler: function(){
                    loadModeratedCards();
                }
            },
            {
                text: 'Заблокированные',
                tooltip: 'Отображает заблокированные визитки',
                handler: function(){
                    loadBlockedCards();
                }
            },
            '-',
            {
                text: 'Добавить',
                tooltip: 'Отображает диалог добавления визитки',
                handler: function(){
                    showBusinessCardDialog();
                }
            },
            {
                text: 'Редактировать',
                tooltip: 'Отображает диалог редактирования визитки',
                handler: function(){
                    var selectedRecords = Ext.getCmp('businessCards').getSelectedRecords();
                    if (selectedRecords.length == 0){
                        return;
                    }
                    showBusinessCardDialog(selectedRecords[0]);
                }
            },
            {
                text: 'Удалить',
                tooltip: 'Удаляет выбранную визитку',
                handler: function(){
                    var selectedRecords = Ext.getCmp('businessCards').getSelectedRecords();
                    if (selectedRecords.length == 0){
                        return;
                    }
                    var selectedId = selectedRecords[0].data.id;
                    Ext.Msg.show({
                        title: 'Удаление визитки',
                        msg: 'Вы действительно хотите удалить эту визитку?',
                        buttons: Ext.Msg.YESNO,
                        icon: Ext.Msg.QUESTION,
                        fn: function(txt){
                            if (txt == "yes"){
                                global.Ajax({
                                    url: '/ControlPanel/ManageCards/Delete',
                                    params: {id: selectedId},
                                    maskEl: Ext.getCmp('businessCardsPanel'),
                                    maskMsg: 'Идет удаление визитки',
                                    success: function(data){
                                        reloadAllCards();
                                    }
                                });
                            }
                        }
                    });
                }
            },
            '-',
            {
                xtype: 'textfield',
                emptyText: 'Введите часть названия...',
                id: 'cardSearchField',
                allowBlank: true,
                width: 200,
                qtip: 'Введите тут начальные буквы визитки, которую хотите найти'
            },
            {
                text: 'Поиск',
                tooltip: 'Производит серверный поиск по указанному фильтру',
                handler: function(){

                }
            }             
        ]
    };

container.add(businessCardsPanel);
container.doLayout();


    /**
     * Перезагружает все визитки системы
     */
    function reloadAllCards(){
        global.Ajax({
            url: '/ControlPanel/ManageCards/GetCards',
            params: {
                predefinedFilter: 'all'
            },
            maskEl: Ext.getCmp('businessCardsPanel'),
            maskMsg: 'Идет загрузка списка визиток',
            success: function(data){
                Ext.getCmp('businessCards').getStore().loadData(data);
            }
        });
    }
    reloadAllCards();

    /**
     * Загружает только визитки, находящиеся на проверке
     */
    function loadModeratedCards(){
        global.Ajax({
            url: '/ControlPanel/ManageCards/GetCards',
            params: {
                predefinedFilter: 'moderated'
            },
            maskEl: Ext.getCmp('businessCardsPanel'),
            maskMsg: 'Идет загрузка списка визиток',
            success: function(data){
                Ext.getCmp('businessCards').getStore().loadData(data);
            }
        });
    }

    /**
     * Загружает только визитки, которые были заблокированы
     */
    function loadBlockedCards(){
        global.Ajax({
            url: '/ControlPanel/ManageCards/GetCards',
            params: {
                predefinedFilter: 'blocked'
            },
            maskEl: Ext.getCmp('businessCardsPanel'),
            maskMsg: 'Идет загрузка списка визиток',
            success: function(data){
                Ext.getCmp('businessCards').getStore().loadData(data);
            }
        });
    }

    /**
     * Отображает диалог создания или редактирования визитки
     * @param card - объект визитки
     */
    function showBusinessCardDialog(card){
        var wnd = new Ext.Window({
            title: card != undefined ? "Редактирование визитки "+card.data.title : "Создание визитки",
            resizable: true,
            width: 350,
            items: [
                {
                    xtype: 'form',
                    id: 'businessCardForm',
                    fileUpload: true,
                    standardSubmit: false,
                    bodyStyle: 'padding: 5px',
                    labelAlign: 'top',
                    items: [
                        {
                            xtype: 'hidden',
                            id: 'businessCardIdField',
                            name: 'id',
                            value: card != undefined ? card.data.id : -1
                        },
                        {
                            xtype: 'combo',
                            fieldLabel: 'Тип визитки',
                            id: 'businessCardTypeField',
                            mode: 'local',
                            triggerAction: 'all',
                            lazyRender: true,
                            readonly: true,
                            anchor: '100%',
                            typeAhead: true,
                            store: new Ext.data.ArrayStore({
                                fields: ['id','name'],
                                data: [
                                    [0,"Загружена"],
                                    [1,"Сгенерирована"]
                                ]
                            }),
                            displayField: 'name',
                            valueField: 'id',
                            hiddenName: 'cardType',
                            value: card != undefined ? card.data.cardType : 0
                        },
                        {
                            xtype: 'combo',
                            fieldLabel: 'Тип владельца визитки',
                            id: 'businessCardHolderTypeField',
                            mode: 'local',
                            triggerAction: 'all',
                            lazyRender: true,
                            readonly: true,
                            anchor: '100%',
                            typeAhead: true,
                            store: new Ext.data.ArrayStore({
                                fields: ['id','name'],
                                data: [
                                    [0,"Специалист"],
                                    [1,"Компания"]
                                ]
                            }),
                            displayField: 'name',
                            valueField: 'id',
                            hiddenName: 'cardHolderType',
                            value: card != undefined ? card.data.cardHolderType : 0
                        },
                        {
                            xtype: 'combo',
                            fieldLabel: 'Статус',
                            id: 'businessCardStatusField',
                            mode: 'local',
                            triggerAction: 'all',
                            lazyRender: true,
                            readonly: true,
                            anchor: '100%',
                            typeAhead: true,
                            store: new Ext.data.ArrayStore({
                                fields: ['id','name'],
                                data: [
                                    [0,"В работе"],
                                    [1,"На проверке"],
                                    [2,"Заблокирована"]
                                ]
                            }),
                            displayField: 'name',
                            valueField: 'id',
                            hiddenName: 'status',
                            value: card != undefined ? card.data.status : 0
                        },
                        {
                            xtype: 'textfield',
                            id: 'businessCardTitleField',
                            allowBlank: false,
                            fieldLabel: 'ФИО или Название компании',
                            maxLength: 255,
                            anchor: '100%',
                            name: 'title',
                            value: card != undefined ? card.data.title : ""
                        },
                        {
                            xtype: 'textfield',
                            id: 'businessCardDescriptionField',
                            allowBlank: false,
                            fieldLabel: 'Должность или краткое описание компании',
                            maxLength: 255,
                            anchor: '100%',
                            name: 'description',
                            value: card != undefined ? card.data.description : ""
                        },
                        {
                            xtype: 'textfield',
                            id: 'businessCardCityField',
                            allowBlank: false,
                            fieldLabel: 'Город',
                            readonly: true,
                            maxLength: 255,
                            anchor: '100%',
                            name: 'city',
                            value: card != undefined ? card.data.city : "Хабаровск"
                        },
                        {
                            xtype: 'compositefield',
                            anchor: '100%',
                            items: [
                                {
                                    xtype: 'textfield',
                                    id: 'businessCardEmailField',
                                    allowBlank: true,
                                    fieldLabel: 'Email',
                                    readonly: false,
                                    maxLength: 255,
                                    anchor: '100%',
                                    name: 'Email',
                                    flex: 1,
                                    value: card != undefined ? card.data.email : ""
                                },
                                {
                                    xtype: 'textfield',
                                    id: 'businessCardWebSiteField',
                                    allowBlank: true,
                                    fieldLabel: 'Web сайт',
                                    readonly: false,
                                    maxLength: 255,
                                    anchor: '100%',
                                    name: 'website',
                                    flex: 1,
                                    value: card != undefined ? card.data.website : ""
                                },
                                {
                                    xtype: 'textfield',
                                    id: 'businessCardPhonesField',
                                    allowBlank: true,
                                    fieldLabel: 'Телефон',
                                    readonly: false,
                                    maxLength: 255,
                                    anchor: '100%',
                                    name: 'phones',
                                    flex: 1,
                                    value: card != undefined ? card.data.phones : ""
                                }
                            ]
                        },
                        new Ext.ux.form.FileUploadField({
                            fieldLabel: card != undefined ? "Загрузка визитки на замену" : "Выберите картинку визитки для загрузки",
                            id: 'businessCardImageField',
                            buttonText: 'Выбрать',
                            anchor: '100%',
                            name: 'cardImage',
                            allowBlank: card != undefined
                        })
                    ]
                }
            ],
            buttons: [
                {
                    text: 'Сохранить',
                    handler: function(){
                        // Валидируем
                        var form = Ext.getCmp('businessCardForm').getForm();
                        if (!form.isValid()){
                            Ext.Msg.alert('Ошибка','Пожалуйста, правильно заполните все поля формы');
                            return;
                        }
                        // сохраняем
                        form.submit({
                            url: '/ControlPanel/ManageCards/Save',
                            clientValidation: true,
                            success: function(form,action){
                                // Успешно сохранили
                                wnd.close();
                                reloadAllCards();
                            },
                            failure: function(form,action){
                                wnd.close();
                                reloadAllCards();
                            }
                        });
                    }
                },
                {
                    text: 'Отмена',
                    handler: function(){
                        wnd.close();
                    }
                }
            ]
        });
        wnd.show();
    }

});